home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
ms_dos
/
lm
/
all
next >
Wrap
Text File
|
1993-11-30
|
11KB
|
423 lines
# DIVIDE_START=update.doc
-------------------------- lm001a --------------------------
1993.8.1
Version 0.01a 作成開始。
・仕様
(1) 起動方法
lm ディレクトリ名
lm . カレント・ディレクトリの場合
(2) 注意
LHA.EXE をパスの通った所に置いておくこと
(3) 処理内容
1 ディレクトリを探索してCATLOGで整理済のファイルを探す。
2 見つかったら、そのファイルの拡張子を削除してファイル名だけを取り出す。
3 そのファイル名を書庫名として LHA を起動する。
4 CATLOGで整理済のファイルが見つからなくなるまで繰り返す。
# DIVIDE_END
/* DIVIDE_START=main.c */
/*
lm main.c
作 : 山先(NIFTY-ID:GHH01217)
*/
#define MAIN 1
#include "lm.h"
static void useage()
{
printf(
"CATLOGで整理したファイルを圧縮するプログラム\n\t%s\tVersion=%s"
" by .. GHH01217 山先\n"
, str
, VERSION
);
printf(
"\n 使い方:lm ディレクトリ名"
"\n lm . ……………… カレント・ディレクトリの場合"
);
}
/******************************************
#if VERIFY == YES
if ( verify == TRUE ) {
printf( "同じ発言日時、発言番号のものは削除する" );
};
#endif
*********************************************/
const char *last_comma( const char *str )
{
const char *result;
result = str;
while ( *str ) { if ( *str == '.' ) result = str;
str++;
}; return( result );
}
const char *last_yen( const char *str )
{
const char *result;
result = str;
while ( *str ) { if ( *str == '\\' ) result = str;
str++;
}; return( result );
}
void append_yen( char *str )
{
char c;
while ( *str ) str++;
c = *( str -1 );
if ( c != '\\' && c != ':' ) {
*str++ = '\\';
*str = '\0';
};
}
static void (*lm_findfirst_sub)( const char *file , const char *ff_name );
static void lm_findfirst_loop( const char *path )
{
int done;
struct ffblk ffblk;
char f_name[ 256 ];
strcpy( f_name , path ); strcat( f_name , "*.*" ); /* 全ファイルを検索 */
done = findfirst( f_name , &ffblk , FA_DIREC ); /* Directory を指定 */
while ( ! done ) {
strcpy( f_name , path ); strcat( f_name , ffblk.ff_name );
if ( ffblk.ff_attrib == FA_DIREC ) {
if ( strcmp( ffblk.ff_name , "." ) != 0
&& strcmp( ffblk.ff_name , ".." ) != 0
) { /* Sub dir 再帰呼出し */
strcat( f_name , "\\" ); lm_findfirst_loop( f_name );
};
} else {
/* ファイル名 */
(*lm_findfirst_sub)( f_name , ffblk.ff_name );
};
done = findnext( &ffblk );
};
}
void lm_findfirst(
const char *path,
void (*sub)( const char *file , const char *ff_name )
) {
lm_findfirst_sub = sub;
lm_findfirst_loop( path );
}
int matchstr( char *form , char *trg )
{
while ( *form ) {
switch( *form ) {
case '%': if ( ! isdigit( *trg ) ) return( FALSE );
break;
case '$': if ( ! isalpha( *trg ) ) return( FALSE );
case '?': break;
default: if ( *form != *trg ) return( FALSE );
};
form++; trg++;
};
return( TRUE );
}
int isIDname( char *str )
{
if ( matchstr( "$$$%%%%%" , str ) == TRUE ) return( YES );
return( NO );
}
static int isCATLOGFile( const char *f_name )
{
int num;
char *p1 , *p2;
FILE *fpi;
if ( ( fpi=fopen( f_name , "r" ) ) == NULL ) { /* 起こり得ないエラー */
printf( str, "can't open→<%s> (read)\n", f_name );
exit( 1 );
};
fgets( str , LINE , fpi );
num = 0;
if ( strncmp( str , "FORUM:" , 6 ) == 0 ) {
p1 = str + 6; p2 = str;
while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
while ( *p1 == ' ' ) p1++;
if ( strncmp( p1 , "MES:" , 4 ) == 0 ) {
p1 += 4; /* skip 'MES:' */
num = atoi( p1 );
};
} else if ( strncmp( str , "MAIL:" , 5 ) == 0 ) {
p1 = str + 5; p2 = str;
while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
if ( isIDname( str ) == YES ) {
num = MAIL;
};
} else if ( strncmp( str , "HP:" , 3 ) == 0 ) {
p1 = str + 3; p2 = str;
while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
if ( isIDname( str ) == YES ) {
num = HP;
};
} else if ( strncmp( str , "PATIO:" , 6 ) == 0 ) {
p1 = str + 6; p2 = str;
while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
if ( isIDname( str ) == YES ) {
num = PATIO;
};
} else if ( strncmp( str , "BILL:BILL" , 9 ) == 0 ) {
num = BILL;
} else if ( strncmp( str , "COLLECT_ID:" , 11 ) == 0 ) {
p1 = str + 11; p2 = str;
while ( isalnum( *p1 ) ) *p2++ = *p1++; *p2 = '\0';
if ( isIDname( str ) == YES ) {
num = COLLECT_ID;
};
} else if ( strncmp( str , "ALL-MAIL" , 8 ) == 0 ) {
num= ALL_MAIL;
} else if ( strncmp( str , "CLIP" , 4 ) == 0 ) {
num = CLIP;
};
fclose( fpi );
return( num );
}
static void main_loop( const char *f_name , const char *ff_name )
{
char *p1, *p2;
if ( isCATLOGFile( f_name ) == 0 ) return;
strcpy( file_name, f_name );
p1 = (char *)last_yen( file_name );
p2 = (char *)last_comma( p1 ); if ( p1 != p2 ) *p2 = '\0';
sprintf( str, "lha u %s %s", file_name, f_name );
printf( "%s\n", str );
if ( spawnlp( P_WAIT, "lha", "lha", "u", file_name, f_name, NULL ) != 0 ) {
printf( "処理の途中ですが、終了します(lm)\n" );
exit( 1 );
};
}
void main( int argc , char *argv[] )
{
char path[ MAX_FILENAME_LEN ];
strcpy( str, argv[0] );
if ( --argc <= 0 ) { useage(); exit( 1 ); };
++argv;
strcpy( path, *argv );
append_yen( path );
lm_findfirst( path, main_loop );
exit( 0 ); /* 終了 */
}
/* DIVIDE_END */
/* DIVIDE_START=lm.h */
/*
作 : 山先(NIFTY-ID:GHH01217)
*/
#include <mylib.h>
#include <stdlib.h>
#include <ctype.h>
#include <jctype.h>
#include <string.h>
#include <process.h>
#include <dos.h>
#include <dir.h>
#include "extern.h"
#define LINE (1024*2)
#define MAX_FILENAME_LEN 64
/* CATLOG の会議室番号の定義 */
#define HP -1 /* Home Party である */
#define MAIL -2 /* 電子メールである */
#define BILL -3 /* 利用料金情報である */
#define COLLECT_ID -4 /* ID収集ファイルである */
#define LIB -5 /* LIB の一覧である */
#define COLLECT_LIB -6 /* IDによる LIB の収集ファイルである */
#define ALL_MAIL -7 /* 1つにまとめた MAIL ファイルである */
#define PATIO -8 /* PATIO である */
#define CLIP -9 /* クリッピングサービスである */
#define MES 20 /* フォーラムの会議室である */
#ifdef MAIN
#if VERIFY == YES
int verify = FALSE;
#endif
char file_name[ MAX_FILENAME_LEN ];
char str[ LINE ];
#else
#if VERIFY == YES
extern int verify ;
#endif
extern char file_name[ MAX_FILENAME_LEN ];
extern char str[ LINE ];
#endif
/* DIVIDE_END */
# DIVIDE_START=makefile
VERSION00 = 0
VERSION01 = 01
VERSION02 = a # 元のバージョン
VERSION03 = b # 現在のバージョン
VERSION04 = $(VERSION00)$(VERSION01)$(VERSION02) # 元の書庫ファイル
VERSION1 = $(VERSION00)
VERSION2 = $(VERSION01)$(VERSION03)
VERSION3 = $(VERSION00)$(VERSION01)$(VERSION02)$(VERSION03)
VERSION = $(VERSION1)$(VERSION2)
MemoryModel = s
tc = tcc
lib = tlib
link = tlink
cflags = -m$(MemoryModel) -A -d -N -O -DVERSION="$(VERSION1).$(VERSION2)" -DVERIFY=YES
.c.obj :
$(tc) -c $(cflags) -Ie:\tc\include $*
.c.com :
$(tc) $(cflags) -Ie:\tc\include $*
$(link) /c \tc\lib\c0t.obj $*.obj , $* , nul , @listlibs
com_prg = lm.exe
hdr1 = lm.h \tc\include\mylib.h
obj1 = main.obj
$(com_prg) : $(obj1) makefile $(hdr1) all listlibs
tlink /c \tc\lib\c0$(MemoryModel).obj $(obj1) , $* , nul , @listlibs
copy $(com_prg) d:\exe
lha u $*$(VERSION) *.exe all
lha u $*$(VERSION)0 *.exe *.ggg readme.doc
# 差分ファイルを作り、削除する
# cd old
# del *.exe
# lha e ..\$*$(VERSION04) *.exe # 元のファイルの解凍
# cd ..
# bdiff old\$*.exe $*.exe $*$(VERSION3).bdf
# lha u $*$(VERSION3) $*$(VERSION3).bdf
# del $:$(VERSION3).bdf
# del $*$(VERSION3).i*
# ish $*$(VERSION3).lzh /ss /mv 100
$(obj1) : $(hdr1) makefile
# DIVIDE_END
# -DIVIDE_START=listlibs
e:\tc\lib\emu e:\tc\lib\maths e:\tc\lib\cs
# DIVIDE_END
REM DIVIDE_START=m.bat
echo off
:loop
if "%1"=="" goto main
vz %1
:loop2
make
if errorlevel 1 goto error
goto end
:main
vz all
div all
goto loop2
:error
pause
goto loop
:end
REM DIVIDE_END
REM DIVIDE_START=u.bat
div -u:update.doc all
if errorlevel 1 goto end
div -a:*.c all
div -a:*.h all
div -a:makefile all
div -a:listlibs all
div -a:*.bat all
div -a:readme.doc all
div -a:*.ggg all
:end
REM DIVIDE_END
/* DIVIDE_START=readme.doc */
------------
lmの使い方
------------
1.lmがすること。
本プログラムは、指定のディレクトリ、及び、その下のディレクトリを
自動検索してCATLOGで整理してできたファイルを検索し、見つけた
ファイルをLHAを起動して、同名の書庫ファイルに圧縮保存するもので
す。
2.CTの実行の仕方
コマンドライン上で、次のように実行して下さい。
lm ディレクトリ名
lm . カレント・ディレクトリの場合
★ 注意
LHA.EXE が必要です。
LHA.EXE をパスの通った所に置いて下さい。そうでないと異常終了します。
☆ 処理内容
1 ディレクトリを探索してCATLOGで整理済のファイルを探す。
CATLOGが作ったファイルかどうかは、そのファイルの1行目を読み込
んで判断しています。
2 見つかったら、そのファイルの拡張子を削除してファイル名だけを取り出す。
3 そのファイル名を書庫名として LHA を起動する。
4 CATLOGで整理済のファイルが見つからなくなるまで 1 ~ 3 を繰り返す。
3.著作権
本プログラムは NIFTY ID:GHH01217 山先(やません)に著作権があるものと
します。しかし、その使用、配付は自由に行っていただいてかまいません。
4.何かありましたら。
私あてメールを下さい。
GHH01217 山先
/* DIVIDE_END */
/* DIVIDE_START=lm.ggg */
======================================================================
【ソフト 名】 lm.exe CATLOG整理済ファイル圧縮プログラム Version 0.01a
【登 録 名】 lm001a.lzh (LHAで解凍して下さい)
【検索 キー】 1:LM 2:MOPTERM 3:FAPX 4:CATLOG
【著作権 者】 山先 GHH01217
【開発 環境】 Turbo-C Ver2.0 → lm.exe
【対応 機種】 MS-DOS 汎用
【動作 確認】 FM-TOWNS20F + 8M-RAM コンソール上
【公 開 日】 93/08/01
【ソフトウェア種別】 通信関連。フリー・ソフトウェア。
【使用 条件】 バグを発見した場合は、メール等で報告すること。
======================================================================
【ソフト紹介】
CATLOGが作るファイルを自動検索してLHAを起動するものです。
別途、LHAを入手して下さい。また、LHAはパスの通った所に置いて
下さい。
詳しくはREAD.DOCをお読み下さい。
ダウンロードファイル名を lm001a.lzh として下さい。
GHH01217 山先
/* DIVIDE_END */